package pe.com.ztaxi.taxis.model;

import java.beans.Transient;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

import com.fasterxml.jackson.annotation.JsonIgnore;

@Entity
@Table
@Inheritance(strategy = InheritanceType.JOINED)
public class Persona {

	@Id
    @GeneratedValue(strategy = GenerationType.AUTO)
	private Integer codigo;

	@Column
	private String nombres;
	
	@Column
	private String apellidos;
	
	@Column
	private String correo;
	
	@Column
	private String tipoDocumento;
	
	@Column
	private String numDocumento;
	
	@Column
	private String direccion;
	
	@Column
	private Date fechaNacimiento;

	@OneToMany(mappedBy = "persona", cascade = CascadeType.ALL)
	@LazyCollection(LazyCollectionOption.FALSE)
	private List<Telefono> telefonos;
	
	public Integer getCodigo() {
		return codigo;
	}

	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}

	public String getNombres() {
		return nombres;
	}

	public void setNombres(String nombres) {
		this.nombres = nombres;
	}

	public String getApellidos() {
		return apellidos;
	}

	public void setApellidos(String apellidos) {
		this.apellidos = apellidos;
	}

	public String getCorreo() {
		return correo;
	}

	public void setCorreo(String correo) {
		this.correo = correo;
	}

	public String getTipoDocumento() {
		return tipoDocumento;
	}

	public void setTipoDocumento(String tipoDocumento) {
		this.tipoDocumento = tipoDocumento;
	}

	public String getNumDocumento() {
		return numDocumento;
	}

	public void setNumDocumento(String numDocumento) {
		this.numDocumento = numDocumento;
	}

	public String getDireccion() {
		return direccion;
	}

	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}

	public Date getFechaNacimiento() {
		return fechaNacimiento;
	}

	public void setFechaNacimiento(Date fechaNacimiento) {
		this.fechaNacimiento = fechaNacimiento;
	}	

	public List<Telefono> getTelefonos() {
		return telefonos;
	}

	public void setTelefonos(List<Telefono> telefonos) {
		this.telefonos = telefonos;
	}

	@JsonIgnore
	@Transient
	public String getNombreCompleto(){
		return this.nombres + " " + this.apellidos;
	}
	
	@JsonIgnore
	@Transient
	public String getAbreviado(){
		return this.nombres + " " + this.apellidos + "      " + this.numDocumento + "      " + this.getTodosTelefonos();
	}
	
	@JsonIgnore
	@Transient
	public String getTodosTelefonos(){
		String t = "";
		for(Telefono telefono : this.telefonos){
			t = t + telefono.getNumero() + " ";
		}
		return t;
	}
}
